package com.tangerine.sonar;

import android.util.Log;

public class Ruta {
	static final String TAG="RUTA";
	private int iPasos;
	private float fAnguloRespectoMapa;
	private float fPendiente;
	private float fOrdenadaOrigen;
	private boolean bRectaTerminada=true;
	private int X1;
	private int Y1;
	private int X2;
	private int Y2;
	
	public int getiPasos() {
		return iPasos;
	}
	
	public void setiPasos(int iPasos) {
		this.iPasos = iPasos;
	}
	
	public float getfAnguloRespectoMapa() {
		return fAnguloRespectoMapa;
	}
	
	public void setfAnguloRespectoMapa(float fAnguloRespectoMapa) {
		this.fAnguloRespectoMapa = fAnguloRespectoMapa;
	}

	public float getPendiente() {
		return fPendiente;
	}
	
	public float getOrdenadaOrigen() {
		return fOrdenadaOrigen;		
	}
	
	public int getX1() {
		return X1;
	}
	
	public int getX2() {
		return X2;
	}
	
	public int getY1() {
		return Y1;
	}
	
	public int getY2() {
		return Y2;
	}
	
	public void setVariablesRecta(int x1, int y1, int x2, int y2)
	{
		this.fPendiente = (y2-y1)/(x2-x1);
		this.fOrdenadaOrigen = y1-(fPendiente*x1);
		
		this.X1 = x1;
		this.Y1 = y1;
		
		this.X2 = x2;
		this.Y2 = y2;
		
		Log.d(TAG, "Punto 1: x1=" + x1 + " y1=" + y1);
		Log.d(TAG, "Punto 2: x2=" + x2 + " y2=" + y2);
		Log.d(TAG, "Pendiente: " + this.fPendiente);
		Log.d(TAG, "Ordenada al origen: " + this.fOrdenadaOrigen);
	}
	
	public float getDistanciaRecta(int x, int y) {

		float fDistancia;
		float fAuxPendiente = this.getPendiente();
		float fAuxOrdenadaOrigen = this.getOrdenadaOrigen();
		
		fDistancia = (float) (((fAuxPendiente*x)-y+fAuxOrdenadaOrigen)/Math.sqrt((fAuxPendiente*fAuxPendiente)+1));
		
		Log.d(TAG, "Distancia al punto x=" + x + " y=" + y + ": " + fDistancia);
		
		if(fDistancia > 1000)
			return fDistancia;
		else
			return (float)0;
	}
	
	public float getDistanciaFinal(int x, int y) {
		int iCuadrante=0;
		int Xfinal=0;
		int Yfinal=0;
		
		if(fAnguloRespectoMapa>=0 || fAnguloRespectoMapa<=90)
			iCuadrante = 1;
		if(fAnguloRespectoMapa>90 || fAnguloRespectoMapa<=180)
			iCuadrante = 2;
		if(fAnguloRespectoMapa>180 || fAnguloRespectoMapa<=270)
			iCuadrante = 3;
		if(fAnguloRespectoMapa>270)
			iCuadrante = 4;
		
		if(iCuadrante == 1 || iCuadrante == 4)
		{
			if(this.getY1()<this.getY2())
			{
				Yfinal = this.getY1();
				Xfinal = this.getX1();
			}
			else
			{
				Yfinal = this.getY1();
				Xfinal = this.getX1();
			}
		}
		else
		{
			if(this.getY1()>this.getY2())
			{
				Yfinal = this.getY1();
				Xfinal = this.getX1();
			}
			else
			{
				Yfinal = this.getY1();
				Xfinal = this.getX1();
			}
		}
		
		int Xaux = Xfinal - x;
		int Yaux = Yfinal - y;
		
		return (float)Math.hypot(Math.abs(Xaux), Math.abs(Yaux));
	}
	
	public void setAnguloCalculado(int x1,int y1,int x2, int y2)
	{
		int iCuadrante=0;
		int iXNeto=Math.abs(x1-x2);
		int iYNeto=Math.abs(y1-y2);
		double aRad;
		double angulo;
		if(x1-x2>0)
			if(y1-y2>0)
			{
				iCuadrante=4;
				//Va para la izq y arriba
				aRad = Math.atan2(iYNeto, iXNeto);
			    angulo = Math.toDegrees(aRad);
				fAnguloRespectoMapa = 270f+(float)angulo;//Opuesto/Adyacente
			}
			else
			{
				iCuadrante=3;
				aRad = Math.atan2(iXNeto, iYNeto);
			    angulo = Math.toDegrees(aRad);
				fAnguloRespectoMapa = 180f+(float)angulo;//Opuesto/Adyacente
			}
		else
			if(y1-y2>0)
			{
				iCuadrante=1;
				aRad = Math.atan2(iXNeto, iYNeto);
			    angulo = Math.toDegrees(aRad);
				fAnguloRespectoMapa = (float)angulo;//Opuesto/Adyacente
			}
			else
			{
				iCuadrante=2;
				aRad = Math.atan2(iYNeto, iXNeto);
			    angulo = Math.toDegrees(aRad);
				fAnguloRespectoMapa = 90f+(float)angulo;//Opuesto/Adyacente
			}
		Log.d(TAG,"x1:"+x1+";x2:"+x2+";y1:"+y1+";y2:"+y2+";Angulo:"+fAnguloRespectoMapa+";Cuadrante:"+iCuadrante);
		
	}
	public boolean isbRectaTerminada() {
		return bRectaTerminada;
	}
	public void setbRectaTerminada(boolean bRectaTerminada) {
		this.bRectaTerminada = bRectaTerminada;
	}
}